package estacion.persistencia;

import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;

import estacion.dominio.Conductor;
import estacion.dominio.Persona;
import estacion.dominio.Revisor;
import estacion.dominio.TiposLicencia;
import estacion.dominio.Trabajador;

public class FPConductor {

	public static void insertConductor(Conductor cond) throws Exception {
		
		String SQL="Insert into persona(DNI, nombre,apellido1, apellido2, contrasena, num_cuenta_corriente,horas_trabajadas,turno,horas_seguidas,email,rol,tipo_vehiculo,Dinero_revisor,licencia)" +
			"values('"+cond.getDNI()+"','"+cond.getNombre()+"','"+cond.getApellido1()+"','"+cond.getApellido2()+"', '"+cond.getContrasena()+"'" +
			" ,"+cond.getNum_cuenta_corriente()+","+cond.getHoras_trabajadas()+",'"+cond.getTurno()+"',"+cond.getHoras_seguidas()+", '"+cond.getEmail()+"', 'Conductor', " +
			"'"+cond.getTipo_vehiculo()+"',"+cond.getDinero_revisor()+", '"+cond.getLicencia().getTipo_licencia()+"')";
			
		Conexion bd=null;
		Exception ex=null;
		PreparedStatement p=null;
		try {
			bd=Gestor_bbdd.get().getBD();
			p=bd.prepareStatement(SQL);
			p.executeUpdate();
		}
		catch (Exception e) {
			ex=e;
		}
		finally {
			bd.close();
			if (ex!=null)
				throw ex;
		}
	}

	//Elmina una Persona dado el dni
	public static void deleteConductor(String dni) throws Exception {
		String SQL="Delete from persona where DNI=? and rol='Conductor'";
		Conexion bd=null;
		Exception ex=null;
		PreparedStatement p=null;
		try {
			bd=Gestor_bbdd.get().getBD();
			p=bd.prepareStatement(SQL);
			p.setString(1, dni);
			p.executeUpdate();
		}
		catch (Exception e) {
			ex=e;
		}
		finally {
			bd.close();
			if (ex!=null)
				throw ex;
		}	
	}
	
	public static Conductor consultarConductor(String dni) throws Exception {
		Conductor cond=null;
		TiposLicencia li=null;
		String SQL="Select * from persona where DNI='"+dni+"' and rol='Conductor'";
		
		Conexion bd=null;
		Exception ex=null;
		PreparedStatement p=null;
		try {
			bd=Gestor_bbdd.get().getBD();
			p=bd.prepareStatement(SQL);
			ResultSet r=p.executeQuery();
			while (r.next()) {
				cond=new Conductor();
				li=new TiposLicencia();
				cond.setDNI(r.getString("DNI"));
				cond.setNombre(r.getString("nombre"));
				cond.setApellido1(r.getString("apellido1"));
				cond.setApellido2(r.getString("apellido2"));
				cond.setNum_cuenta_corriente(r.getInt("num_cuenta_corriente"));
				cond.setContrasena(r.getString("contrasena"));
				cond.setEmail(r.getString("email"));
				cond.setRol(r.getString("rol"));
				cond.setHoras_trabajadas(r.getInt("horas_trabajadas"));
				cond.setHoras_seguidas(r.getInt("horas_seguidas"));
				cond.setTurno(r.getString("turno"));
				cond.setTipo_vehiculo(r.getString("tipo_vehiculo"));
				cond.setDinero_revisor(r.getDouble("Dinero_revisor"));
				li.setTipo_licencia(r.getString("licencia"));
				cond.setLicencia(li);
			}			
		}
		catch (Exception e) {
			ex=e;
		}
		finally {
			bd.close();
			if (ex!=null)
				throw ex;
		}
		return cond;
	}
	
	public static Conductor consultaOcupado(String vehiculo) throws Exception {
		Conductor cond=null;
		String SQL="Select * from persona where tipo_vehiculo='"+vehiculo+"' and rol='Conductor'";
		
		Conexion bd=null;
		Exception ex=null;
		PreparedStatement p=null;
		try {
			bd=Gestor_bbdd.get().getBD();
			p=bd.prepareStatement(SQL);
			ResultSet r=p.executeQuery();
			while (r.next()) {
				cond=new Conductor();
				cond.setDNI(r.getString("DNI"));
			}			
		}
		catch (Exception e) {
			ex=e;
		}
		finally {
			bd.close();
			if (ex!=null)
				throw ex;
		}
		return cond;
	}
	
	public static void modificarConductor(Conductor cond, String dni) throws Exception{
		String SQL="UPDATE persona SET nombre='"+cond.getNombre()+"', apellido1='"+cond.getApellido1()+"', apellido2='"+cond.getApellido2()+"', contrasena='"+cond.getContrasena()+"'"+
			", num_cuenta_corriente="+cond.getNum_cuenta_corriente()+", email='"+cond.getEmail()+"'," +
			" horas_trabajadas="+cond.getHoras_trabajadas()+", horas_seguidas="+cond.getHoras_seguidas()+", turno='"+cond.getTurno()+"', " +
			" tipo_vehiculo='"+cond.getTipo_vehiculo()+"', Dinero_revisor="+cond.getDinero_revisor()+", licencia='"+cond.getLicencia().getTipo_licencia()+"' "+
			"where DNI='"+dni+"' and rol='Conductor'";
		
		Conexion bd=null;
		Exception ex=null;
		PreparedStatement update=null;
		try {
			bd=Gestor_bbdd.get().getBD();
			update=bd.prepareStatement(SQL);
			update.executeUpdate();

			
		}
		catch (Exception e) {
			ex=e;
		}
		finally {
			bd.close();
			if (ex!=null)
				throw ex;
		}
		
	}
	
	public static Vector<Persona> getConductores() throws Exception {
		Vector<Persona> result=new Vector<Persona>();
		String SQL="Select * from persona where rol='Conductor'";
		Conexion bd=null;
		Exception ex=null;
		PreparedStatement p=null;
		try {
			bd=Gestor_bbdd.get().getBD();
			p=bd.prepareStatement(SQL);
			ResultSet r=p.executeQuery();
			while (r.next()) {
				Conductor cond=new Conductor();
				cond=new Conductor();
				TiposLicencia li=new TiposLicencia();
				cond.setDNI(r.getString("DNI"));
				cond.setNombre(r.getString("nombre"));
				cond.setApellido1(r.getString("apellido1"));
				cond.setApellido2(r.getString("apellido2"));
				cond.setNum_cuenta_corriente(r.getInt("num_cuenta_corriente"));
				cond.setContrasena(r.getString("contrasena"));
				cond.setEmail(r.getString("email"));
				cond.setRol(r.getString("rol"));
				cond.setHoras_trabajadas(r.getInt("horas_trabajadas"));
				cond.setHoras_seguidas(r.getInt("horas_seguidas"));
				cond.setTurno(r.getString("turno"));
				cond.setTipo_vehiculo(r.getString("tipo_vehiculo"));
				cond.setDinero_revisor(r.getDouble("Dinero_revisor"));
				li.setTipo_licencia(r.getString("licencia"));
				cond.setLicencia(li);
				result.add(cond);
			}			
		}
		catch (Exception e) {
			ex=e;
		}
		finally {
			bd.close();
			if (ex!=null)
				throw ex;
		}
		return result;
	}
}
